perm filename EPARSE.HDI[EAL,HE] blob sn#704686 filedate 1983-03-30 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00008 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002	  1) EPARSE.HDR[EAL,HE] and 2) ALHDR.2[EAL,HE]	3-30-83 12:02	pages 1,1
C00010 00003
C00013 00004
C00019 00005
C00021 00006
C00026 00007
C00030 00008
C00032 ENDMK
C⊗;
  1) EPARSE.HDR[EAL,HE] and 2) ALHDR.2[EAL,HE]	3-30-83 12:02	pages 1,1

**** File 1) EPARSE.HDR[EAL,HE]/1P/1L
1)	(* Header file for EEXPAR and EPAR3x with x = A,B,D,E,F	*)
1)	const
1)		(* Constants from EDIT *)
**** File 2) ALHDR.2[EAL,HE]/1P/1L
2)	(* The following bits are used during calls to the ARM servo *)
2)	const
2)		YARMDEV   = 1;		(* device numbers *)
2)		YHANDDEV  = 2;
2)		BARMDEV   = 3;
2)		BHANDDEV  = 4;
2)		VISEDEV   = 5;
2)		DRIVERDEV = 6;
2)		GARMDEV   = 7;
2)		GHANDDEV  = 8;
2)		RARMDEV   = 9;
2)		RHANDDEV  = 10;
2)		YELARM = 1B;		(* Yellow arm *)
2)		BLUARM = 4B;		(* Blue arm *)
2)		FTABLE = 400B;		(* Force trans (C) in table coordinates *)
2)		FHAND  = 0B;		(*   "	 "    "   " hand coordinate system *)
2)		XFORCE = 0B;		(* Force along X direction of C *)
2)		YFORCE = 1000B;		(*   "	  "   Y	    "	  "  " *)
2)		ZFORCE = 2000B;		(*   "	  "   Z	    "	  "  " *)
2)		XMOMENT = 3000B;	(* Moment about X direction of C *)
2)		YMOMENT = 4000B;	(*   "	   "   Y     "	   "  " *)
2)		ZMOMENT = 5000B;	(*   "	   "   Z     "	   "  " *)
2)		FSTOP  = 10000B;	(* In addition to starting cmon, stop arm *)
2)		SIGMAG = 20000B;	(* Test only magnitude of forces *)
2)		SIGGE = 100000B;	(* Start cmon if force ≥ specified value *)
2)		SIGLT = 0B;		(*   "	  "  "	  "   <	    "	    " *)
2)		barmpower = 1B;		(* bit defs - used in response to initarmscmd *)
2)		yarmpower = 2B;
2)		garmpower = 4B;
2)		rarmpower = 10B;
2)		garmcal = 400B;
2)		rarmcal = 1000B;
2)		nullingcb = 1B;		(* control bits for trajectory specs *)
2)		wobblecb = 2B;
2)		durlbcb = 20B;		(* Duration: lower, upper & exact bounds *)
2)		durubcb = 40B;
2)		dureqcb = 60B;
2)		veloccb = 100B;
2)		codecb = 200B;
2)		viaptcb = 400B;
2)		deprptcb = 1000B;
2)		apprptcb = 2000B;
2)		destptcb = 10000B;
2)		(* Constants from EDIT *)
***************


**** File 1) EPARSE.HDR[EAL,HE]/3P/11L
1)	strngp = ↑strng;
1)	statementp = ↑statement;
**** File 2) ALHDR.2[EAL,HE]/3P/11L
2)	vectorp = ↑vector;
2)	transp = ↑trans;
2)	strngp = ↑strng;
2)	eventp = ↑event;
2)	framep = ↑frame;
2)	statementp = ↑statement;
***************



**** File 1) EPARSE.HDR[EAL,HE]/3P/17L
1)	pdbp = ↑pdb;
1)	reswordp = ↑resword;
1)	linerecp = ↑linerec;
1)	cursorpp = ↑cursorp;	{Ron's style, not mine}
1)	(* This one is used whenever a pointer is needed for which the 	*)
1)	(* definition is missing from this file; naturally, all 	*)
1)	(* pointers use the same space 					*)
1)	dump = ↑integer;
1)	(* datatype definitions *)
**** File 2) ALHDR.2[EAL,HE]/3P/21L
2)	reswordp = ↑resword;
2)	pdbp = ↑pdb;
2)	envheaderp = ↑envheader;
2)	enventryp = ↑enventry;
2)	environp = ↑environment;
2)	cmoncbp = ↑cmoncb;
2)	messagep = ↑message;
2)	linerecp = ↑linerec;
2)	cursorpp = ↑cursorp;	{Ron's style, not mine}
2)	(* the following get used for misc record types - i.e. we fake out Pascal's type
2)		checking mechanism *)
2)	     s4p = ↑s4;
2)	     s4 = record next: s4p; filler: array [1..3] of integer; end;
2)	     s8p = ↑s8;
2)	     s8 = record next: s8p; filler: array [1..7] of integer; end;
2)	     s11p = ↑s11;
2)	     s11 = record next: s11p; filler: array [1..10] of integer; end;
2)	(* datatype definitions *)
***************


**** File 1) EPARSE.HDR[EAL,HE]/4P/10L
1)	cstring = packed array [1..10] of ascii;
**** File 2) ALHDR.2[EAL,HE]/4P/10L
2)	u = (used,free);
2)	vector = record case u of
2)		   used: (refcnt: integer; val: array [1..3] of real);
2)		   free: (next: vectorp);
2)		 end;
2)	trans = record case u of
2)		   used: (refcnt: integer; val: array [1..3,1..4] of real);
2)		   free: (next: transp);
2)		end;
2)	cstring = packed array [1..10] of ascii;
***************



**** File 1) EPARSE.HDR[EAL,HE]/5P/1L
1)	(* statement definitions *)
**** File 2) ALHDR.2[EAL,HE]/4P/33L
2)	event = record
2)		  next: eventp;		(* all events are on one big list *)
2)		  count: integer;
2)		  waitlist: pdbp;
2)		end;
2)	frame = record
2)		  vari: varidefp;	(* back pointer to variable name & info *)
2)		  calcs: nodep;		(* affixment info *)
2)		  case ftype: boolean of	(* frame = true, device = false *)
2)	  true:	    (valid: integer; val, fdepr: transp; dcntr: integer; dev: framep);
2)	  false:    (mech: integer; case sdev: boolean of
2)			true: (sdest: real); false: (tdest,appr,depr: transp));
2)			(* sdev = true for scalar devices, false for frames *)
2)		end;
2)	(* statement definitions *)
***************


**** File 1) EPARSE.HDR[EAL,HE]/7P/46L
1)		vectype:   (v: dump);
1)		transtype: (t: dump);
1)		strngtype: (length: integer; str: strngp) ); (* also used by commentnodes *)
1)	    deprnode,
**** File 2) ALHDR.2[EAL,HE]/7P/46L
2)		vectype:   (v: vectorp);
2)		transtype: (t: transp);
2)		strngtype: (length: integer; str: strngp) ); (* also used by commentnodes *)
2)	    listnode:	(lval: nodep);
2)	    clistnode:	(cval: integer; stmnt: statementp; clast: nodep);
2)	    colistnode:	(prev: nodep; cstmnt: statementp);
2)	    forvalnode:	(fvar: enventryp; fstep: scalar);
2)	    arrivalnode:(evar: varidefp);
2)	    deprnode,
***************


**** File 1) EPARSE.HDR[EAL,HE]/7P/52L
1)	    arrivalnode:(evar: varidefp);
1)	    viaptnode:	(vlist: boolean; via,duration,velocity: nodep; vcode: statementp);
1)	    durnode:	(durrel: reltypes; durval: nodep);
1)	    swtnode:	(clval: nodep);
1)	    ffnode:	(ff: nodep; csys, pdef: boolean); (* true = world, false = hand *)
1)	    gathernode:	(gbits: integer);
1)	    cwnode:	(notp: boolean); (* true = nonulling/zero wrist/counter_clockwise *)
1)	    forcenode:	(ftype: forcetypes; frel: reltypes; fval, fvec, fframe: nodep);
1)	    stiffnode:	(fv, mv, coc: nodep);
1)	    listnode:	(lval: nodep);
1)	    clistnode:	(cval: integer; stmnt: statementp; clast: nodep);
1)	    colistnode:	(prev: nodep; cstmnt: statementp);
1)	    forvalnode:	(fvar: dump; fstep: scalar);
1)	    cmonnode:	(cmon: statementp; errhandlerp: boolean);
1)	    errornode:	(eexpr: nodep);
1)	    arraydefnode: (numdims: 1..10; bounds: nodep; combnds: boolean);
**** File 2) ALHDR.2[EAL,HE]/7P/57L
2)	    viaptnode:	(vlist: boolean; via,duration,velocity: nodep; vcode: statementp);
2)	    durnode:	(durrel: reltypes; durval: nodep);
2)	    sfacnode,
2)	    wobblenode,
2)	    swtnode:	(clval: nodep);
2)	    nullingnode,
2)	    wristnode,
2)	    cwnode:	(notp: boolean); (* true = nonulling/don't zero wrist/counter_clockwise *)
2)	    ffnode:	(ff: nodep; csys, pdef: boolean); (* true = world, false = hand *)
2)	    forcenode:	(ftype: forcetypes; frel: reltypes; fval, fvec, fframe: nodep);
2)	    stiffnode:	(fv, mv, coc: nodep);
2)	    gathernode:	(gbits: integer);
2)	    cmonnode:	(cmon: statementp; errhandlerp: boolean);
2)	    errornode:	(eexpr: nodep);
2)	    calcnode: 	(rigid, frame1: boolean; other: framep; case tvarp: boolean of 
2)			    false: (tval: transp); true: (tvar: enventryp) );
2)	    arraydefnode: (numdims: 1..10; bounds: nodep; combnds: boolean);
***************



**** File 1) EPARSE.HDR[EAL,HE]/7P/70L
1)	    procdefnode:(ptype: datatypes; level: 0..255;
1)			    pname, paramlist: varidefp; body: statementp);
1)		end;
**** File 2) ALHDR.2[EAL,HE]/7P/76L
2)	    waitlistnode: (who: pdbp; when: integer);
2)	    procdefnode:(ptype: datatypes; level: 0..255;
2)			    pname, paramlist: varidefp; body: statementp);
2)	    tlistnode:	(tok: tokenp);
2)	    dimnode:	(time, distance, angle, dforce: integer);
2)		end;
***************


**** File 1) EPARSE.HDR[EAL,HE]/9P/12L
1)		env: dump;
1)		spc: statementp;	(* current statement *)
**** File 2) ALHDR.2[EAL,HE]/9P/12L
2)		env: envheaderp;
2)		spc: statementp;	(* current statement *)
***************


**** File 1) EPARSE.HDR[EAL,HE]/9P/16L
1)		cm: dump;		(* if we're a cmon point to our definition *)
1)		mech: dump;		(* current device being used *)
1)		linenum: integer;	(* used by editor/debugger *)
**** File 2) ALHDR.2[EAL,HE]/9P/16L
2)		cm: cmoncbp;		(* if we're a cmon point to our definition *)
2)		mech: framep;		(* current device being used *)
2)		linenum: integer;	(* used by editor/debugger *)
***************



**** File 1) EPARSE.HDR[EAL,HE]/9P/22L
1)	false: (evt: dump;		(* event to signal when process goes away *)
1)		sdef: statementp);	(* first statement where process was defined *)
1)	      end;
1)	(* print related records: *)
**** File 2) ALHDR.2[EAL,HE]/9P/22L
2)	false: (evt: eventp;		(* event to signal when process goes away *)
2)		sdef: statementp);	(* first statement where process was defined *)
2)	      end;
2)	envheader = packed record
2)		      parent: envheaderp;
2)		      env: array [0..4] of environp;
2)		      varcnt: 0..255;		(* # of variables in use ??? *)
2)			case procp: boolean of  (* true if we're a procedure *)
2)		true: (proc: nodep);
2)		false:(block: statementp);
2)		    end;
2)	enventry = record
2)		    case etype: datatypes of
2)	  svaltype:  (s: scalar);
2)	  vectype:   (v: vectorp);
2)	  transtype: (t: transp);
2)	  frametype: (f: framep);
2)	  eventtype: (evt: eventp);
2)	  strngtype: (length: integer; str: strngp);
2)	  cmontype:  (c: cmoncbp);
2)	  proctype:  (p: nodep; penv: envheaderp);
2)	  reftype:   (r: enventryp);
2)	  arraytype: (a: envheaderp; bnds: nodep);
2)		   end;
2)	environment = record
2)			next: environp;
2)			vals: array [0..9] of enventryp;
2)		      end;
2)	cmoncb = record
2)		   running, enabled: boolean;		(* cmon's status *)
2)		   cmon: statementp;
2)		   pdb: pdbp;
2)		   evt: eventp;
2)		   fbits: integer;			(* bits for force sensing *)
2)		   oldcmon: cmoncbp;			(* for debugger *)
2)		 end;
2)	(* definition of AL-ARM messages *)
2)	msgtypes = (initarmscmd,calibcmd,killarmscmd,wherecmd,
2)		    abortcmd,stopcmd,movehdrcmd,movesegcmd,
2)		    centercmd,operatecmd,movedonecmd,signalcmd,readjtcmd,drivecmd,
2)		    setccmd,forcesigcmd,forceoffcmd,biasoncmd,biasoffcmd,setstiffcmd,
2)		    zerowristcmd,wristcmd,gathercmd,getgathercmd,readadccmd,writedaccmd,
2)		    errorcmd,floatcmd);
2)	errortypes = (noerror,noarmsol,timerr,durerr,toolong,useopr,nosuchdev,featna,
2)		      unkmess,srvdead,adcdead,nozind,exjtfc,paslim,nopower,badpot,devbusy,
2)		      baddev,timout,panicb);
2)	message = record
2)		   cmd: msgtypes;
2)		   ok: boolean;
2)		   case integer of
2)		1:   (dev, bits, n: integer;
2)	(*	     (dev, bits, n, evt: integer;	(* for arm code version *)
2)		      evt: eventp;
2)		      dur: real;
2)		      case integer of
2)			1: (v1,v2,v3: real);
2)			2: (sfac,wobble,pos: real);
2)			3: (val,angle,mag: real);
2)			4: (max,min: real);
2)			5: (error: errortypes));
2)		2:   (fv1,fv2,fv3,mv1,mv2,mv3: real);	(* may never use these... *)
2)		3:   (t: array [1..6] of real);
2)		  end;
2)	interr = record
2)	         case integer of
2)	           0: (i: integer);
2)		   1: (err,foo: errortypes);
2)		 end;
2)	(* print related records: *)
***************



**** File 1) EPARSE.HDR[EAL,HE]/11P/22L
1)	(*  filedepth: integer;
1)	    curpage: integer;
**** File 2) ALHDR.2[EAL,HE]/12P/22L
2)	    filedepth: integer;
2)	    curpage: integer;
***************


**** File 1) EPARSE.HDR[EAL,HE]/11P/31L
1)	    curErrhandler, curCmon: statementp;	*)
1)	    d1: array[1..13] of dump;
1)	    endOfLine, backup, expandmacros, flushcomments, dimCheck: boolean;
1)	(*  semiseen, shownline: boolean;
1)	    eofError: boolean;
1)	    inMove,inCoblock: boolean;	*)
1)	    d2,d3,d4,d5,d6: boolean;
1)	    curtoken: token;
**** File 2) ALHDR.2[EAL,HE]/12P/31L
2)	    curErrhandler, curCmon: statementp;
2)	    endOfLine, backup, expandmacros, flushcomments, dimCheck: boolean;
2)	    semiseen, shownline: boolean;
2)	    eofError: boolean;
2)	    inMove,inCoblock: boolean;
2)	    curtoken: token;
***************


**** File 1) EPARSE.HDR[EAL,HE]/11P/44L
1)	    curEnv, sysEnv: dump;
1)	    clkQueue: nodep;
1)	    allEvents: dump;
1)	    STLevel: integer;		
1)	    etime: integer;		
1)	    curtime: integer; 		
1)	    stime: integer;		
1)	    msg: dump;			
1)	    inputp: integer;
1)	    debugLevel: integer;
**** File 2) ALHDR.2[EAL,HE]/12P/42L
2)	    curEnv, sysEnv: envheaderp;
2)	    clkQueue: nodep;
2)	    allEvents: eventp;
2)	    STLevel: integer;		(* set by GO *)
2)	    etime: integer;		(* used by eval *)
2)	    curtime: integer; 		(* Time of day, in ticks *)
2)	    stime: integer;		(* used for clock queue on 10 *)
2)	    msg: messagep;		(* for AL-ARM interaction *)
2)	    inputp: integer;		(* current offset into inputLine array above *)
2)	    debugLevel: integer;
***************


**** File 1) EPARSE.HDR[EAL,HE]/11P/79L
1)	    backUp: boolean;			
1)	    eSingleThreadMode: boolean;	
**** File 2) ALHDR.2[EAL,HE]/12P/77L
2)	    eBackup: boolean;			
2)	    eSingleThreadMode: boolean;	
***************


**** File 1) EPARSE.HDR[EAL,HE]/11P/85L
1)	    curToken: token;			
1)		(* Various device & variable pointers *)
1)	    speedfactor: dump;
1)	    barm: dump;
1)		(* Various constant pointers *)
1)	    xhat,yhat,zhat,nilvect: dump;
1)	    niltrans: dump;
1)	    bpark, ypark, gpark, rpark: dump;		(* arm park positions *)
**** File 2) ALHDR.2[EAL,HE]/12P/83L
2)	    eCurToken: token;			
2)		(* Various device & variable pointers *)
2)	    speedfactor: enventryp;
2)	    barm: framep;
2)		(* Various constant pointers *)
2)	    xhat,yhat,zhat,nilvect: vectorp;
2)	    niltrans: transp;
2)	    bpark, ypark, gpark, rpark: transp;		(* arm park positions *)
***************